package xmlGen;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class Connexion {

	protected final static String CONNEXIONFILE = "filelog.xml";
	private Document document;
	private Element root;
	
	/**
	 * Ouvre le fichier de connexion s'il existe
	 * le cree sinon
	 */
	public Connexion() {
		
		try {
			this.ouvrir();
		} catch (JDOMException e) {
			this.newXMLFile();
		} catch (IOException e) {
			this.newXMLFile();
		}
	}
	
	/**
	 * Cree un fichier de sauvegarde vierge
	 */
	private void newXMLFile() {

		root = new Element("members");
		document = new Document(root);
	}

	/**
	 * Ouvre le fichier de sauvegarde 
	 * @throws JDOMException
	 * @throws IOException
	 */
	private void ouvrir() throws JDOMException, IOException {
		
		SAXBuilder sxb = new SAXBuilder();  
		document = sxb.build(new File(CONNEXIONFILE));
	    root = document.getRootElement();
	}
	
	/**
	 * Enregistre le fichier de sauvegarde
	 */
	public void save() {
		
		try {
			XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
			sortie.output(document, new FileOutputStream(CONNEXIONFILE));
		} catch (IOException e) {
		}
	}
	
	/**
	 * Ajoute un nouveau login et password
	 * @param pseudo Login du nouveau membre
	 * @param password Mot de Passe du nouveau membre
	 */
	public void addMember(String pseudo, String password) {
		
		Element member = new Element("member");
		Element elt = new Element("Pseudo");
		elt.addContent(pseudo);
		member.addContent(elt);
		elt = new Element("Password");
		elt.addContent(password);
		member.addContent(elt);
		root.addContent(member);
		save();
	}
	
	/**
	 * Verifie si la personne peut se connecter
	 * @param pseudo Login du membre
	 * @param password Mot de Passe du membre
	 * @return Vrai si le membre existe, faux sinon
	 */
	@SuppressWarnings("unchecked")
	public boolean connect(String pseudo, String password) {
		
		Iterator it = root.getChildren().iterator();
		while(it.hasNext()) {
			Element courant = (Element)it.next();
			if(courant.getChildText("Pseudo").equals(pseudo)) {
				if(courant.getChildText("Password").equals(password)) {
					return true;
				}
			}
		}
		
		return false;
	}
	
	
	/**
	 * Verifie si le loggin n'est pas pris
	 * 
	 * @param loggin {@link String} a verifier
	 * @return vrai si libre, faux sinon
	 */
	@SuppressWarnings("unchecked")
	public boolean isLogginFree(String loggin) {
		
		Iterator<Element> it = root.getChildren().iterator();
		while(it.hasNext()) {
			Element courant = it.next();
			if(courant.getChildText("Pseudo").equalsIgnoreCase(loggin)) {
				return false;
			}
		}
		
		return true;
	}
}
